import axios from 'axios';
import { Message } from '@alifd/next';
import { SUCCESS_RESULT_CODE } from '../constants';

const API_GENERAL_ERROR_MESSAGE = 'Request error, please try again later!';

const request = () => {
  const instance = axios.create();

  instance.interceptors.response.use((response) => {
    const { success, resultCode, resultMessage = API_GENERAL_ERROR_MESSAGE } = response.data;
    if (!success && resultCode !== SUCCESS_RESULT_CODE) {
      Message.error(resultMessage);
      return Promise.reject(new Error(resultMessage));
    }
    return response.data;
  }, (error) => {
    if (error.response) {
      const { status } = error.response;
      Message.error(`HTTP ERROR: ${status}`);
    } else {
      Message.error(API_GENERAL_ERROR_MESSAGE);
    }
    return Promise.reject(error);
  });

  return instance;
};

export default request();
